package com.rimi.controller;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

@Controller
public class FileController {
	@RequestMapping("fileInfo")
	public String fileInfo(Model m) {
		return "File/index";
	}

	@RequestMapping("getAddFile")
	public String getAddFile(Model m) {
		return "File/addFile";
	}

	// Spring MVC上传
	// 1.jar包
	// 2.核心配置文件配置上传的组件(器)
	// 3.controller SpringMVC 1)文件类型数组 用于接收文件 2)文件对象基于HTTPServlet对象重新封装了一个新的类型

	@RequestMapping("upload")
	// fiels 与jsp页面想对应,所有叫files的参数(文件)均被装进这个数组
	public String upload(@RequestParam CommonsMultipartFile[] files, HttpServletRequest request) {
		//得到项目根路径最新方法
		String realPath = request.getSession().getServletContext().getRealPath("WEB-INF/upload/");
		for (int i = 0; i < files.length; i++) {

			MultipartFile file = files[i];
			String fileName = file.getOriginalFilename();
			// 先把文件读进输入流
			InputStream in;
			try {
				in = file.getInputStream();
				OutputStream out = new FileOutputStream(realPath+fileName);
				// 以字节流的方式读写(长度就为输入流的长度)
				byte[] bt = new byte[in.available()];
				// 将文件读进数组
				in.read(bt);
				// 将文件输出
				out.write(bt);
				out.flush();
				out.close();
				in.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// 指定输出流输出的路径

		}
		return "redirect:fileInfo";
	}

	/*@RequestMapping("upload1")
	public String upload1(HttpServletRequest req) {
		// 因为在SpringMVC下,所以需要用MultipartRequest来完成HttpServletRequest的工作
		MultipartHttpServletRequest request = (MultipartHttpServletRequest) req;
		// 都是得到file的方法.这里用第三种
		// 1.request.getFile("");
		// 2.request.getFileMap(); 为什么不行
		// 3.request.getFiles(arg0);
		// 4.request.getMultiFileMap();
		
		//这个数组(同时这个数组也是一个泛型)把页面所有的MultipartFile全装进去了,所以map集合的键值对只有一个
		Map<String,List<MultipartFile>> m=request.getMultiFileMap();
		//把值的集合装进迭代器
		Iterator<List<MultipartFile>> it=m.values().iterator();
		while(it.hasNext()){
			List<MultipartFile> list=it.next();
			for (int i = 0; i < list.size(); i++) {
				MultipartFile mf=list.get(i);
				System.out.println(mf.getName());
			}
			
		}
		return "redirect:fileInfo";
	}
	*/

}
